{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from sklearn.externals import joblib\n",
    "import keras\n",
    "from keras import models\n",
    "from keras import layers\n",
    "import model_evaluation_utils as meu\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((18300, 2048), (6100, 2048), (6100, 2048))"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_features = joblib.load('train_tl_features.pkl')\n",
    "train_labels = joblib.load('train_labels.pkl')\n",
    "validation_features = joblib.load('validate_tl_features.pkl')\n",
    "validation_labels = joblib.load('validate_labels.pkl')\n",
    "test_features = joblib.load('test_tl_features.pkl')\n",
    "test_labels = joblib.load('test_labels.pkl')\n",
    "\n",
    "train_features.shape, validation_features.shape, test_features.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((18300,), (6100,), (6100,))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_labels.shape, validation_labels.shape, test_labels.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from keras.utils import to_categorical\n",
    "\n",
    "train_labels_ohe = to_categorical(train_labels)\n",
    "validation_labels_ohe = to_categorical(validation_labels)\n",
    "test_labels_ohe = to_categorical(test_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((18300, 10), (6100, 10), (6100, 10))"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_labels_ohe.shape, validation_labels_ohe.shape, test_labels_ohe.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_1 (Dense)              (None, 1024)              2098176   \n",
      "_________________________________________________________________\n",
      "dropout_1 (Dropout)          (None, 1024)              0         \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 1024)              1049600   \n",
      "_________________________________________________________________\n",
      "dropout_2 (Dropout)          (None, 1024)              0         \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 512)               524800    \n",
      "_________________________________________________________________\n",
      "dropout_3 (Dropout)          (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_4 (Dense)              (None, 512)               262656    \n",
      "_________________________________________________________________\n",
      "dropout_4 (Dropout)          (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 10)                5130      \n",
      "=================================================================\n",
      "Total params: 3,940,362\n",
      "Trainable params: 3,940,362\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model = models.Sequential()\n",
    "model.add(layers.Dense(1024, activation='relu', input_shape=(train_features.shape[1],)))\n",
    "model.add(layers.Dropout(0.4))\n",
    "model.add(layers.Dense(1024, activation='relu'))\n",
    "model.add(layers.Dropout(0.4))\n",
    "model.add(layers.Dense(512, activation='relu'))\n",
    "model.add(layers.Dropout(0.5))\n",
    "model.add(layers.Dense(512, activation='relu'))\n",
    "model.add(layers.Dropout(0.5))\n",
    "model.add(layers.Dense(train_labels_ohe.shape[1], activation='softmax'))\n",
    "model.compile(loss='categorical_crossentropy', optimizer='adam',                 \n",
    "                      metrics=['accuracy'])\n",
    "\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 18300 samples, validate on 6100 samples\n",
      "Epoch 1/50\n",
      "18300/18300 [==============================] - 2s - loss: 2.7953 - acc: 0.3959 - val_loss: 1.0665 - val_acc: 0.6675\n",
      "Epoch 2/50\n",
      "18300/18300 [==============================] - 1s - loss: 1.1606 - acc: 0.6211 - val_loss: 0.8179 - val_acc: 0.7444\n",
      "Epoch 3/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.9639 - acc: 0.6894 - val_loss: 0.6886 - val_acc: 0.7915\n",
      "Epoch 4/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.8433 - acc: 0.7295 - val_loss: 0.6637 - val_acc: 0.7908\n",
      "Epoch 5/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.7705 - acc: 0.7569 - val_loss: 0.5964 - val_acc: 0.8198\n",
      "Epoch 6/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.7160 - acc: 0.7691 - val_loss: 0.5718 - val_acc: 0.8308\n",
      "Epoch 7/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.6636 - acc: 0.7867 - val_loss: 0.5309 - val_acc: 0.8321\n",
      "Epoch 8/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.6083 - acc: 0.8038 - val_loss: 0.5368 - val_acc: 0.8408\n",
      "Epoch 9/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.5908 - acc: 0.8095 - val_loss: 0.4775 - val_acc: 0.8502\n",
      "Epoch 10/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.5552 - acc: 0.8256 - val_loss: 0.4782 - val_acc: 0.8502\n",
      "Epoch 11/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.5261 - acc: 0.8336 - val_loss: 0.4812 - val_acc: 0.8530\n",
      "Epoch 12/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.5231 - acc: 0.8342 - val_loss: 0.4697 - val_acc: 0.8548\n",
      "Epoch 13/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.4881 - acc: 0.8431 - val_loss: 0.4418 - val_acc: 0.8574\n",
      "Epoch 14/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.4752 - acc: 0.8503 - val_loss: 0.4410 - val_acc: 0.8674\n",
      "Epoch 15/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.4645 - acc: 0.8523 - val_loss: 0.4526 - val_acc: 0.8621\n",
      "Epoch 16/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.4348 - acc: 0.8620 - val_loss: 0.4561 - val_acc: 0.8536\n",
      "Epoch 17/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.4372 - acc: 0.8638 - val_loss: 0.4364 - val_acc: 0.8623\n",
      "Epoch 18/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.4240 - acc: 0.8644 - val_loss: 0.4223 - val_acc: 0.8720\n",
      "Epoch 19/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.4074 - acc: 0.8705 - val_loss: 0.4211 - val_acc: 0.8693\n",
      "Epoch 20/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3951 - acc: 0.8738 - val_loss: 0.4125 - val_acc: 0.8687\n",
      "Epoch 21/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3808 - acc: 0.8809 - val_loss: 0.4104 - val_acc: 0.8730\n",
      "Epoch 22/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3878 - acc: 0.8785 - val_loss: 0.4062 - val_acc: 0.8713\n",
      "Epoch 23/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3747 - acc: 0.8797 - val_loss: 0.4260 - val_acc: 0.8675\n",
      "Epoch 24/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3719 - acc: 0.8809 - val_loss: 0.4276 - val_acc: 0.8702\n",
      "Epoch 25/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3615 - acc: 0.8850 - val_loss: 0.4148 - val_acc: 0.8754\n",
      "Epoch 26/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3671 - acc: 0.8833 - val_loss: 0.4015 - val_acc: 0.8777\n",
      "Epoch 27/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3603 - acc: 0.8871 - val_loss: 0.4043 - val_acc: 0.8741\n",
      "Epoch 28/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3455 - acc: 0.8873 - val_loss: 0.4158 - val_acc: 0.8720\n",
      "Epoch 29/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3474 - acc: 0.8902 - val_loss: 0.4345 - val_acc: 0.8703\n",
      "Epoch 30/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3319 - acc: 0.8967 - val_loss: 0.4515 - val_acc: 0.8692\n",
      "Epoch 31/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3277 - acc: 0.8958 - val_loss: 0.4073 - val_acc: 0.8739\n",
      "Epoch 32/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3365 - acc: 0.8940 - val_loss: 0.4153 - val_acc: 0.8775\n",
      "Epoch 33/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3152 - acc: 0.9013 - val_loss: 0.4107 - val_acc: 0.8818\n",
      "Epoch 34/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3137 - acc: 0.9021 - val_loss: 0.4184 - val_acc: 0.8797\n",
      "Epoch 35/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3020 - acc: 0.9049 - val_loss: 0.4202 - val_acc: 0.8762\n",
      "Epoch 36/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3161 - acc: 0.9035 - val_loss: 0.4112 - val_acc: 0.8756\n",
      "Epoch 37/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3211 - acc: 0.8990 - val_loss: 0.4247 - val_acc: 0.8787\n",
      "Epoch 38/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3188 - acc: 0.9005 - val_loss: 0.4392 - val_acc: 0.8684\n",
      "Epoch 39/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3063 - acc: 0.9036 - val_loss: 0.4322 - val_acc: 0.8767\n",
      "Epoch 40/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3106 - acc: 0.9080 - val_loss: 0.4425 - val_acc: 0.8731\n",
      "Epoch 41/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.3080 - acc: 0.9058 - val_loss: 0.3931 - val_acc: 0.8823\n",
      "Epoch 42/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.2952 - acc: 0.9099 - val_loss: 0.4147 - val_acc: 0.8833\n",
      "Epoch 43/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.2911 - acc: 0.9113 - val_loss: 0.4242 - val_acc: 0.8854\n",
      "Epoch 44/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.2878 - acc: 0.9146 - val_loss: 0.4201 - val_acc: 0.8816\n",
      "Epoch 45/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.2805 - acc: 0.9128 - val_loss: 0.4247 - val_acc: 0.8848\n",
      "Epoch 46/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.2766 - acc: 0.9136 - val_loss: 0.4249 - val_acc: 0.8833\n",
      "Epoch 47/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.2720 - acc: 0.9156 - val_loss: 0.4090 - val_acc: 0.8830\n",
      "Epoch 48/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.2753 - acc: 0.9157 - val_loss: 0.4218 - val_acc: 0.8797\n",
      "Epoch 49/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.2813 - acc: 0.9142 - val_loss: 0.4220 - val_acc: 0.8810\n",
      "Epoch 50/50\n",
      "18300/18300 [==============================] - 1s - loss: 0.2631 - acc: 0.9197 - val_loss: 0.3887 - val_acc: 0.8890\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(train_features,\n",
    "                    train_labels_ohe,\n",
    "                    epochs=50,\n",
    "                    batch_size=128,\n",
    "                    validation_data=(validation_features, validation_labels_ohe), \n",
    "                    shuffle=True,\n",
    "                    verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5824/6100 [===========================>..] - ETA: 0s"
     ]
    }
   ],
   "source": [
    "predictions = model.predict_classes(test_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n/gC8DSwEugM7gSnGmCMvgukQRGQMsAL4nkO1XL/Dqsnr8G0UkaFYFz/Ysb7ALjTG3CcivbB6BpKB\nb4FrjTG1wYu09fw/Hd5hjLk0lNrnb8tb/lUH8Jox5kERSSEEPqPBpOfsjkfP2R3/nNZYKJ63g3XO\nDqmEWimllFJKqfYWSiUfSimllFJKtTtNqJVSSimllGoFTaiVUkoppZRqBU2olVJKKaWUagVNqJVS\nSimllGoFTahVSBIRr4isbbTMbcNjZ4nI+rY6nlJKhTs9Z6uOTqceV6Gq2hhzarCDUEop1SJ6zlYd\nmvZQq7AiIrki8oiIfC8iK0Wkj397loh8LCLrROQjEenu354uIm+JyHf+5Uz/oewi8oyIbBCRf/tn\n1FJKKdWG9JytOgpNqFWoijri58NrGj1Waow5Bfgr1ixtAE8CLxljhgKvAk/4tz8BfGqMGQaMADb4\nt/cF/maMGQyUAFcGuD1KKRXK9JytOjSdKVGFJBGpMMbENrE9FzjPGLNDRJzAPmNMiogcALoYY9z+\n7fnGmFQRKQQyG0+/KiJZwIfGmL7+9d8CTmPMA4FvmVJKhR49Z6uOTnuoVTgyzdw/HrWN7nvR6xGU\nUipQ9JytTnqaUKtwdE2j2y/9978ApvrvTwdW+O9/BNwMICJ2EUloryCVUkoBes5WHYB+Q1OhKkpE\n1jZaf98YUz8MU5KIrMPqsZjm3/ZL4AUR+Q1QCMz0b/8VME9Ersfq1bgZyA949EopFV70nK06NK2h\nVmHFX4+XbYw5EOxYlFJKHZ2es1VHoSUfSimllFJKtYL2UCullFJKKdUK2kOtlFJKKaVUK2hCrZRS\nSimlVCtoQq2UUkoppVQraEKtlFJKKaVUK2hCrZRSSimlVCtoQq2UUkoppVQr/H/WPgL6Lr5fXwAA\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fdd0f8fdcc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))\n",
    "t = f.suptitle('Deep Neural Net Performance', fontsize=12)\n",
    "f.subplots_adjust(top=0.85, wspace=0.2)\n",
    "\n",
    "epochs = list(range(1,51))\n",
    "ax1.plot(epochs, history.history['acc'], label='Train Accuracy')\n",
    "ax1.plot(epochs, history.history['val_acc'], label='Validation Accuracy')\n",
    "ax1.set_ylabel('Accuracy Value')\n",
    "ax1.set_xlabel('Epoch')\n",
    "ax1.set_title('Accuracy')\n",
    "l1 = ax1.legend(loc=\"best\")\n",
    "\n",
    "ax2.plot(epochs, history.history['loss'], label='Train Loss')\n",
    "ax2.plot(epochs, history.history['val_loss'], label='Validation Loss')\n",
    "ax2.set_ylabel('Loss Value')\n",
    "ax2.set_xlabel('Epoch')\n",
    "ax2.set_title('Loss')\n",
    "l2 = ax2.legend(loc=\"best\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "class_map = {'0' : 'air_conditioner', '1' : 'car_horn', '2' : 'children_playing', '3' : 'dog_bark', '4' : 'drilling', \n",
    "             '5' : 'engine_idling', '6' : 'gun_shot', '7' : 'jackhammer', '8' : 'siren', '9' : 'street_music'}\n",
    "\n",
    "test_labels_categories = [class_map[str(label)] for label in test_labels]\n",
    "prediction_labels_categories = [class_map[str(label)] for label in predictions]\n",
    "category_names = list(class_map.values())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.8869\n",
      "Precision: 0.8864\n",
      "Recall: 0.8869\n",
      "F1 Score: 0.8861\n"
     ]
    }
   ],
   "source": [
    "meu.get_metrics(true_labels=test_labels_categories, \n",
    "                predicted_labels=prediction_labels_categories)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                  precision    recall  f1-score   support\n",
      "\n",
      "        car_horn       0.87      0.73      0.79       188\n",
      "           siren       0.95      0.94      0.94       750\n",
      "        drilling       0.88      0.93      0.90       697\n",
      "        gun_shot       0.94      0.94      0.94        71\n",
      "children_playing       0.83      0.79      0.81       750\n",
      " air_conditioner       0.89      0.94      0.92       813\n",
      "      jackhammer       0.92      0.93      0.92       735\n",
      "   engine_idling       0.94      0.95      0.95       745\n",
      "        dog_bark       0.87      0.83      0.85       543\n",
      "    street_music       0.81      0.81      0.81       808\n",
      "\n",
      "     avg / total       0.89      0.89      0.89      6100\n",
      "\n"
     ]
    }
   ],
   "source": [
    "meu.display_classification_report(true_labels=test_labels_categories, \n",
    "                                  predicted_labels=prediction_labels_categories, \n",
    "                                  classes=category_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"10\" halign=\"left\">Predicted:</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>car_horn</th>\n",
       "      <th>siren</th>\n",
       "      <th>drilling</th>\n",
       "      <th>gun_shot</th>\n",
       "      <th>children_playing</th>\n",
       "      <th>air_conditioner</th>\n",
       "      <th>jackhammer</th>\n",
       "      <th>engine_idling</th>\n",
       "      <th>dog_bark</th>\n",
       "      <th>street_music</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"10\" valign=\"top\">Actual:</th>\n",
       "      <th>car_horn</th>\n",
       "      <td>137</td>\n",
       "      <td>4</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>siren</th>\n",
       "      <td>1</td>\n",
       "      <td>705</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>18</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>drilling</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>650</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>29</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>gun_shot</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>67</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>children_playing</th>\n",
       "      <td>2</td>\n",
       "      <td>11</td>\n",
       "      <td>13</td>\n",
       "      <td>1</td>\n",
       "      <td>592</td>\n",
       "      <td>14</td>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "      <td>31</td>\n",
       "      <td>77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>air_conditioner</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "      <td>768</td>\n",
       "      <td>7</td>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>jackhammer</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>28</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "      <td>680</td>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>engine_idling</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>10</td>\n",
       "      <td>4</td>\n",
       "      <td>707</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>dog_bark</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>37</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>448</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>street_music</th>\n",
       "      <td>12</td>\n",
       "      <td>15</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>64</td>\n",
       "      <td>18</td>\n",
       "      <td>10</td>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "      <td>656</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         Predicted:                                           \\\n",
       "                           car_horn siren drilling gun_shot children_playing   \n",
       "Actual: car_horn                137     4       15        0                3   \n",
       "        siren                     1   705        5        0                7   \n",
       "        drilling                  1     2      650        0                1   \n",
       "        gun_shot                  0     0        1       67                0   \n",
       "        children_playing          2    11       13        1              592   \n",
       "        air_conditioner           2     0        6        1                8   \n",
       "        jackhammer                0     0       28        0                0   \n",
       "        engine_idling             1     0        3        0                4   \n",
       "        dog_bark                  1     9        8        2               37   \n",
       "        street_music             12    15       12        0               64   \n",
       "\n",
       "                                                                            \\\n",
       "                         air_conditioner jackhammer engine_idling dog_bark   \n",
       "Actual: car_horn                       3          4             1        2   \n",
       "        siren                         18          1             2        6   \n",
       "        drilling                       4         29             2        4   \n",
       "        gun_shot                       0          0             1        2   \n",
       "        children_playing              14          2             7       31   \n",
       "        air_conditioner              768          7            10        2   \n",
       "        jackhammer                    14        680            11        0   \n",
       "        engine_idling                 10          4           707        8   \n",
       "        dog_bark                      10          0             1      448   \n",
       "        street_music                  18         10             7       14   \n",
       "\n",
       "                                       \n",
       "                         street_music  \n",
       "Actual: car_horn                   19  \n",
       "        siren                       5  \n",
       "        drilling                    4  \n",
       "        gun_shot                    0  \n",
       "        children_playing           77  \n",
       "        air_conditioner             9  \n",
       "        jackhammer                  2  \n",
       "        engine_idling               8  \n",
       "        dog_bark                   27  \n",
       "        street_music              656  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "meu.display_confusion_matrix_pretty(true_labels=test_labels_categories, \n",
    "                                    predicted_labels=prediction_labels_categories, \n",
    "                                    classes=category_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "model.save('sound_classification_model.h5') "
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
